// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*!
 * @file MonitoringTopics.hpp
 * This header file contains the declaration of the described types in the IDL file.
 *
 * This file was generated by the tool fastddsgen.
 */

#ifndef FAST_DDS_GENERATED__MONITORINGTOPICS_HPP
#define FAST_DDS_GENERATED__MONITORINGTOPICS_HPP

#include <cstdint>
#include <string>
#include <utility>
#include <vector>

#include <fastcdr/cdr/fixed_size_string.hpp>

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#define eProsima_user_DllExport __declspec( dllexport )
#else
#define eProsima_user_DllExport
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define eProsima_user_DllExport
#endif  // _WIN32

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#if defined(MONITORINGTOPICS_SOURCE)
#define MONITORINGTOPICS_DllAPI __declspec( dllexport )
#else
#define MONITORINGTOPICS_DllAPI __declspec( dllimport )
#endif // MONITORINGTOPICS_SOURCE
#else
#define MONITORINGTOPICS_DllAPI
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define MONITORINGTOPICS_DllAPI
#endif // _WIN32

/*!
 * @brief This class represents the structure DdsTopicData defined by the user in the IDL file.
 * @ingroup MonitoringTopics
 */
class DdsTopicData
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport DdsTopicData()
    {
    }

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~DdsTopicData()
    {
    }

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object DdsTopicData that will be copied.
     */
    eProsima_user_DllExport DdsTopicData(
            const DdsTopicData& x)
    {
                    m_participant_id = x.m_participant_id;

                    m_msgs_lost = x.m_msgs_lost;

                    m_msgs_received = x.m_msgs_received;

                    m_msg_rx_rate = x.m_msg_rx_rate;

    }

    /*!
     * @brief Move constructor.
     * @param x Reference to the object DdsTopicData that will be copied.
     */
    eProsima_user_DllExport DdsTopicData(
            DdsTopicData&& x) noexcept
    {
        m_participant_id = std::move(x.m_participant_id);
        m_msgs_lost = x.m_msgs_lost;
        m_msgs_received = x.m_msgs_received;
        m_msg_rx_rate = x.m_msg_rx_rate;
    }

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object DdsTopicData that will be copied.
     */
    eProsima_user_DllExport DdsTopicData& operator =(
            const DdsTopicData& x)
    {

                    m_participant_id = x.m_participant_id;

                    m_msgs_lost = x.m_msgs_lost;

                    m_msgs_received = x.m_msgs_received;

                    m_msg_rx_rate = x.m_msg_rx_rate;

        return *this;
    }

    /*!
     * @brief Move assignment.
     * @param x Reference to the object DdsTopicData that will be copied.
     */
    eProsima_user_DllExport DdsTopicData& operator =(
            DdsTopicData&& x) noexcept
    {

        m_participant_id = std::move(x.m_participant_id);
        m_msgs_lost = x.m_msgs_lost;
        m_msgs_received = x.m_msgs_received;
        m_msg_rx_rate = x.m_msg_rx_rate;
        return *this;
    }

    /*!
     * @brief Comparison operator.
     * @param x DdsTopicData object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const DdsTopicData& x) const
    {
        return (m_participant_id == x.m_participant_id &&
           m_msgs_lost == x.m_msgs_lost &&
           m_msgs_received == x.m_msgs_received &&
           m_msg_rx_rate == x.m_msg_rx_rate);
    }

    /*!
     * @brief Comparison operator.
     * @param x DdsTopicData object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const DdsTopicData& x) const
    {
        return !(*this == x);
    }

    /*!
     * @brief This function copies the value in member participant_id
     * @param _participant_id New value to be copied in member participant_id
     */
    eProsima_user_DllExport void participant_id(
            const std::string& _participant_id)
    {
        m_participant_id = _participant_id;
    }

    /*!
     * @brief This function moves the value in member participant_id
     * @param _participant_id New value to be moved in member participant_id
     */
    eProsima_user_DllExport void participant_id(
            std::string&& _participant_id)
    {
        m_participant_id = std::move(_participant_id);
    }

    /*!
     * @brief This function returns a constant reference to member participant_id
     * @return Constant reference to member participant_id
     */
    eProsima_user_DllExport const std::string& participant_id() const
    {
        return m_participant_id;
    }

    /*!
     * @brief This function returns a reference to member participant_id
     * @return Reference to member participant_id
     */
    eProsima_user_DllExport std::string& participant_id()
    {
        return m_participant_id;
    }


    /*!
     * @brief This function sets a value in member msgs_lost
     * @param _msgs_lost New value for member msgs_lost
     */
    eProsima_user_DllExport void msgs_lost(
            uint32_t _msgs_lost)
    {
        m_msgs_lost = _msgs_lost;
    }

    /*!
     * @brief This function returns the value of member msgs_lost
     * @return Value of member msgs_lost
     */
    eProsima_user_DllExport uint32_t msgs_lost() const
    {
        return m_msgs_lost;
    }

    /*!
     * @brief This function returns a reference to member msgs_lost
     * @return Reference to member msgs_lost
     */
    eProsima_user_DllExport uint32_t& msgs_lost()
    {
        return m_msgs_lost;
    }


    /*!
     * @brief This function sets a value in member msgs_received
     * @param _msgs_received New value for member msgs_received
     */
    eProsima_user_DllExport void msgs_received(
            uint32_t _msgs_received)
    {
        m_msgs_received = _msgs_received;
    }

    /*!
     * @brief This function returns the value of member msgs_received
     * @return Value of member msgs_received
     */
    eProsima_user_DllExport uint32_t msgs_received() const
    {
        return m_msgs_received;
    }

    /*!
     * @brief This function returns a reference to member msgs_received
     * @return Reference to member msgs_received
     */
    eProsima_user_DllExport uint32_t& msgs_received()
    {
        return m_msgs_received;
    }


    /*!
     * @brief This function sets a value in member msg_rx_rate
     * @param _msg_rx_rate New value for member msg_rx_rate
     */
    eProsima_user_DllExport void msg_rx_rate(
            double _msg_rx_rate)
    {
        m_msg_rx_rate = _msg_rx_rate;
    }

    /*!
     * @brief This function returns the value of member msg_rx_rate
     * @return Value of member msg_rx_rate
     */
    eProsima_user_DllExport double msg_rx_rate() const
    {
        return m_msg_rx_rate;
    }

    /*!
     * @brief This function returns a reference to member msg_rx_rate
     * @return Reference to member msg_rx_rate
     */
    eProsima_user_DllExport double& msg_rx_rate()
    {
        return m_msg_rx_rate;
    }



private:

    std::string m_participant_id;
    uint32_t m_msgs_lost{0};
    uint32_t m_msgs_received{0};
    double m_msg_rx_rate{0.0};

};
/*!
 * @brief This class represents the structure DdsTopic defined by the user in the IDL file.
 * @ingroup MonitoringTopics
 */
class DdsTopic
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport DdsTopic()
    {
    }

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~DdsTopic()
    {
    }

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object DdsTopic that will be copied.
     */
    eProsima_user_DllExport DdsTopic(
            const DdsTopic& x)
    {
                    m_name = x.m_name;

                    m_type_name = x.m_type_name;

                    m_type_discovered = x.m_type_discovered;

                    m_type_mismatch = x.m_type_mismatch;

                    m_qos_mismatch = x.m_qos_mismatch;

                    m_data = x.m_data;

    }

    /*!
     * @brief Move constructor.
     * @param x Reference to the object DdsTopic that will be copied.
     */
    eProsima_user_DllExport DdsTopic(
            DdsTopic&& x) noexcept
    {
        m_name = std::move(x.m_name);
        m_type_name = std::move(x.m_type_name);
        m_type_discovered = x.m_type_discovered;
        m_type_mismatch = x.m_type_mismatch;
        m_qos_mismatch = x.m_qos_mismatch;
        m_data = std::move(x.m_data);
    }

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object DdsTopic that will be copied.
     */
    eProsima_user_DllExport DdsTopic& operator =(
            const DdsTopic& x)
    {

                    m_name = x.m_name;

                    m_type_name = x.m_type_name;

                    m_type_discovered = x.m_type_discovered;

                    m_type_mismatch = x.m_type_mismatch;

                    m_qos_mismatch = x.m_qos_mismatch;

                    m_data = x.m_data;

        return *this;
    }

    /*!
     * @brief Move assignment.
     * @param x Reference to the object DdsTopic that will be copied.
     */
    eProsima_user_DllExport DdsTopic& operator =(
            DdsTopic&& x) noexcept
    {

        m_name = std::move(x.m_name);
        m_type_name = std::move(x.m_type_name);
        m_type_discovered = x.m_type_discovered;
        m_type_mismatch = x.m_type_mismatch;
        m_qos_mismatch = x.m_qos_mismatch;
        m_data = std::move(x.m_data);
        return *this;
    }

    /*!
     * @brief Comparison operator.
     * @param x DdsTopic object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const DdsTopic& x) const
    {
        return (m_name == x.m_name &&
           m_type_name == x.m_type_name &&
           m_type_discovered == x.m_type_discovered &&
           m_type_mismatch == x.m_type_mismatch &&
           m_qos_mismatch == x.m_qos_mismatch &&
           m_data == x.m_data);
    }

    /*!
     * @brief Comparison operator.
     * @param x DdsTopic object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const DdsTopic& x) const
    {
        return !(*this == x);
    }

    /*!
     * @brief This function copies the value in member name
     * @param _name New value to be copied in member name
     */
    eProsima_user_DllExport void name(
            const std::string& _name)
    {
        m_name = _name;
    }

    /*!
     * @brief This function moves the value in member name
     * @param _name New value to be moved in member name
     */
    eProsima_user_DllExport void name(
            std::string&& _name)
    {
        m_name = std::move(_name);
    }

    /*!
     * @brief This function returns a constant reference to member name
     * @return Constant reference to member name
     */
    eProsima_user_DllExport const std::string& name() const
    {
        return m_name;
    }

    /*!
     * @brief This function returns a reference to member name
     * @return Reference to member name
     */
    eProsima_user_DllExport std::string& name()
    {
        return m_name;
    }


    /*!
     * @brief This function copies the value in member type_name
     * @param _type_name New value to be copied in member type_name
     */
    eProsima_user_DllExport void type_name(
            const std::string& _type_name)
    {
        m_type_name = _type_name;
    }

    /*!
     * @brief This function moves the value in member type_name
     * @param _type_name New value to be moved in member type_name
     */
    eProsima_user_DllExport void type_name(
            std::string&& _type_name)
    {
        m_type_name = std::move(_type_name);
    }

    /*!
     * @brief This function returns a constant reference to member type_name
     * @return Constant reference to member type_name
     */
    eProsima_user_DllExport const std::string& type_name() const
    {
        return m_type_name;
    }

    /*!
     * @brief This function returns a reference to member type_name
     * @return Reference to member type_name
     */
    eProsima_user_DllExport std::string& type_name()
    {
        return m_type_name;
    }


    /*!
     * @brief This function sets a value in member type_discovered
     * @param _type_discovered New value for member type_discovered
     */
    eProsima_user_DllExport void type_discovered(
            bool _type_discovered)
    {
        m_type_discovered = _type_discovered;
    }

    /*!
     * @brief This function returns the value of member type_discovered
     * @return Value of member type_discovered
     */
    eProsima_user_DllExport bool type_discovered() const
    {
        return m_type_discovered;
    }

    /*!
     * @brief This function returns a reference to member type_discovered
     * @return Reference to member type_discovered
     */
    eProsima_user_DllExport bool& type_discovered()
    {
        return m_type_discovered;
    }


    /*!
     * @brief This function sets a value in member type_mismatch
     * @param _type_mismatch New value for member type_mismatch
     */
    eProsima_user_DllExport void type_mismatch(
            bool _type_mismatch)
    {
        m_type_mismatch = _type_mismatch;
    }

    /*!
     * @brief This function returns the value of member type_mismatch
     * @return Value of member type_mismatch
     */
    eProsima_user_DllExport bool type_mismatch() const
    {
        return m_type_mismatch;
    }

    /*!
     * @brief This function returns a reference to member type_mismatch
     * @return Reference to member type_mismatch
     */
    eProsima_user_DllExport bool& type_mismatch()
    {
        return m_type_mismatch;
    }


    /*!
     * @brief This function sets a value in member qos_mismatch
     * @param _qos_mismatch New value for member qos_mismatch
     */
    eProsima_user_DllExport void qos_mismatch(
            bool _qos_mismatch)
    {
        m_qos_mismatch = _qos_mismatch;
    }

    /*!
     * @brief This function returns the value of member qos_mismatch
     * @return Value of member qos_mismatch
     */
    eProsima_user_DllExport bool qos_mismatch() const
    {
        return m_qos_mismatch;
    }

    /*!
     * @brief This function returns a reference to member qos_mismatch
     * @return Reference to member qos_mismatch
     */
    eProsima_user_DllExport bool& qos_mismatch()
    {
        return m_qos_mismatch;
    }


    /*!
     * @brief This function copies the value in member data
     * @param _data New value to be copied in member data
     */
    eProsima_user_DllExport void data(
            const std::vector<DdsTopicData>& _data)
    {
        m_data = _data;
    }

    /*!
     * @brief This function moves the value in member data
     * @param _data New value to be moved in member data
     */
    eProsima_user_DllExport void data(
            std::vector<DdsTopicData>&& _data)
    {
        m_data = std::move(_data);
    }

    /*!
     * @brief This function returns a constant reference to member data
     * @return Constant reference to member data
     */
    eProsima_user_DllExport const std::vector<DdsTopicData>& data() const
    {
        return m_data;
    }

    /*!
     * @brief This function returns a reference to member data
     * @return Reference to member data
     */
    eProsima_user_DllExport std::vector<DdsTopicData>& data()
    {
        return m_data;
    }



private:

    std::string m_name;
    std::string m_type_name;
    bool m_type_discovered{false};
    bool m_type_mismatch{false};
    bool m_qos_mismatch{false};
    std::vector<DdsTopicData> m_data;

};
/*!
 * @brief This class represents the structure MonitoringTopics defined by the user in the IDL file.
 * @ingroup MonitoringTopics
 */
class MonitoringTopics
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport MonitoringTopics()
    {
    }

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~MonitoringTopics()
    {
    }

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object MonitoringTopics that will be copied.
     */
    eProsima_user_DllExport MonitoringTopics(
            const MonitoringTopics& x)
    {
                    m_topics = x.m_topics;

    }

    /*!
     * @brief Move constructor.
     * @param x Reference to the object MonitoringTopics that will be copied.
     */
    eProsima_user_DllExport MonitoringTopics(
            MonitoringTopics&& x) noexcept
    {
        m_topics = std::move(x.m_topics);
    }

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object MonitoringTopics that will be copied.
     */
    eProsima_user_DllExport MonitoringTopics& operator =(
            const MonitoringTopics& x)
    {

                    m_topics = x.m_topics;

        return *this;
    }

    /*!
     * @brief Move assignment.
     * @param x Reference to the object MonitoringTopics that will be copied.
     */
    eProsima_user_DllExport MonitoringTopics& operator =(
            MonitoringTopics&& x) noexcept
    {

        m_topics = std::move(x.m_topics);
        return *this;
    }

    /*!
     * @brief Comparison operator.
     * @param x MonitoringTopics object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const MonitoringTopics& x) const
    {
        return (m_topics == x.m_topics);
    }

    /*!
     * @brief Comparison operator.
     * @param x MonitoringTopics object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const MonitoringTopics& x) const
    {
        return !(*this == x);
    }

    /*!
     * @brief This function copies the value in member topics
     * @param _topics New value to be copied in member topics
     */
    eProsima_user_DllExport void topics(
            const std::vector<DdsTopic>& _topics)
    {
        m_topics = _topics;
    }

    /*!
     * @brief This function moves the value in member topics
     * @param _topics New value to be moved in member topics
     */
    eProsima_user_DllExport void topics(
            std::vector<DdsTopic>&& _topics)
    {
        m_topics = std::move(_topics);
    }

    /*!
     * @brief This function returns a constant reference to member topics
     * @return Constant reference to member topics
     */
    eProsima_user_DllExport const std::vector<DdsTopic>& topics() const
    {
        return m_topics;
    }

    /*!
     * @brief This function returns a reference to member topics
     * @return Reference to member topics
     */
    eProsima_user_DllExport std::vector<DdsTopic>& topics()
    {
        return m_topics;
    }



private:

    std::vector<DdsTopic> m_topics;

};

#endif // _FAST_DDS_GENERATED_MONITORINGTOPICS_HPP_


